home *** CD-ROM | disk | FTP | other *** search
/ Aminet 19 / Aminet 19 (1997)(GTI - Schatztruhe)[!][Jun 1997].iso / Aminet / util / time / DigiKlok.lha / DigiKlok.c < prev    next >
C/C++ Source or Header  |  1997-03-14  |  6KB  |  271 lines

  1. /*
  2.  
  3.     $VER: DigiKlok.c 3.0 (25.02.1997) Copyright 1991, 1992, 1997 by Dalibor Kezele
  4.  
  5.     First version:  Thursday, October 10, 1991
  6.     Middle version: Friday, January 3, 1992
  7.     Last verstion:  Tuesday, February 25, 1997
  8.  
  9.     Source code compiled with Aztec C 5.0a.
  10.     e-mail: dkezele@mia.os.carnet.hr
  11.  
  12. */
  13.  
  14. #include <ctype.h>
  15. #include <stdarg.h>
  16. #include <exec/types.h>
  17. #include <libraries/dos.h>
  18.  
  19. #include <graphics/gfx.h>
  20. #include <intuition/intuitionbase.h>
  21. #include <intuition/intuition.h>
  22.  
  23. /* -------------------------------------------------------------------- */
  24.  
  25. char version[] =
  26. "$VER: DigiKlok 3.0 (25.02.1997) Copyright 1991, 1992, 1997 by Dalibor Kezele";
  27.  
  28. struct GfxBase *GfxBase;
  29. struct IntuitionBase    *IntuitionBase;
  30.  
  31. struct Window *window;
  32. struct RastPort *rastport;
  33. struct IntuiMessage *intuimessage;
  34.  
  35. struct NewWindow newwindow = {
  36.     0, 0, 210, 65, 0, 1, CLOSEWINDOW|NEWSIZE|VANILLAKEY,
  37.     WINDOWCLOSE|WINDOWSIZING|WINDOWDRAG|WINDOWDEPTH
  38.     |NOCAREREFRESH|SMART_REFRESH|RMBTRAP,
  39.     0L, 0L, (UBYTE *)"DigiKlok 3.0", 0L, 0L, 200, 60,
  40.        1024, 1024, CUSTOMSCREEN };
  41.  
  42. /* -------------------------------------------------------------------- */
  43.  
  44. ULONG class;
  45. BOOL quit = FALSE;
  46.  
  47. int horsize, versize;
  48. int beginx, beginy;
  49. int spacex, spacey, space;
  50.  
  51. int PosX, PosY, wsize_x=0, wsize_y=0;
  52.  
  53. struct DateStamp now;
  54. unsigned short hrs, min;
  55. unsigned short oldhrs_hi, oldhrs_lo, oldmin_hi, oldmin_lo;
  56.  
  57. /* -------------------------------------------------------------------- */
  58.  
  59. int main(void)
  60. {
  61.  
  62. if(!(IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library", 0L)))
  63.     return 0;
  64.  
  65. if(!(GfxBase = (struct GfxBase *) OpenLibrary("graphics.library", 0L))) {
  66.     CloseLibrary(IntuitionBase);
  67.     return 0;
  68.     }
  69.  
  70. newwindow.Screen = IntuitionBase -> ActiveScreen;
  71. newwindow.LeftEdge = ((newwindow.Screen -> Width) - (newwindow.Width)) / 2;
  72.  
  73. if(!(window = (struct Window *) OpenWindow(&newwindow))) {
  74.     CloseLibrary(GfxBase);
  75.     CloseLibrary(IntuitionBase);
  76.     return 0;
  77.     }
  78.  
  79. rastport=window->RPort;
  80.  
  81. ChangeSize();
  82.  
  83. while (!quit) {
  84.     
  85.     Delay(10L);
  86.     DateStamp(&now);
  87.  
  88.     hrs = now.ds_Minute / 60;
  89.     min = now.ds_Minute % 60;
  90.  
  91.     if (hrs / 10 != oldhrs_hi) {
  92.         DrawNumber(beginx + 4, beginy +  4, hrs / 10);
  93.         DrawPoints((window -> Width - 12) / 2,
  94.             window -> Height / 2 - versize / 2 + 4);
  95.         }
  96.  
  97.     if (hrs % 10 != oldhrs_lo)
  98.         DrawNumber(beginx + horsize * 2 + 4, beginy + 4, hrs % 10);
  99.     if (min / 10 != oldmin_hi)
  100.         DrawNumber(beginx + horsize * 5 + 4, beginy + 4, min / 10);
  101.     if (min % 10 != oldmin_lo)
  102.         DrawNumber(beginx + horsize * 7 + 4, beginy + 4, min % 10);
  103.  
  104.     oldhrs_hi = hrs / 10;
  105.     oldhrs_lo = hrs % 10;
  106.     oldmin_hi = min / 10;
  107.     oldmin_lo = min % 10;
  108.  
  109.     intuimessage = (struct IntuiMessage *) GetMsg(window->UserPort);
  110.  
  111.     if (intuimessage == 0L) continue;
  112.  
  113.     switch (intuimessage -> Class) {
  114.         case NEWSIZE:
  115.             ChangeSize();
  116.             break;
  117.  
  118.         case CLOSEWINDOW:
  119.             quit = TRUE;
  120.             break;
  121.  
  122.         case VANILLAKEY:
  123.             if (intuimessage -> Code == 27)
  124.                 quit=TRUE;
  125.         }
  126.  
  127.     ReplyMsg(intuimessage);
  128.     }
  129.  
  130. CloseWindow(window);
  131. CloseLibrary(GfxBase);
  132. CloseLibrary(IntuitionBase);
  133.  
  134. return 0;
  135. }
  136.  
  137. /* -------------------------------------------------------------------- */
  138.  
  139. int ChangeSize(void)
  140. {
  141.     if(window->Width != wsize_x || window->Height != wsize_y) {
  142.  
  143.         DeleteAll();
  144.     
  145.         oldhrs_hi = oldhrs_lo = oldmin_hi = oldmin_lo = 99;
  146.  
  147.         spacex = (window -> Width) / 50;
  148.         spacey = (window -> Height) / 30;
  149.  
  150.         beginx = spacex + 4;
  151.         beginy = spacey + 12;
  152.  
  153.         horsize = (window -> Width - (spacex * 2 + beginx * 2)) / 8 - 2;
  154.         versize = (window -> Height - (spacey * 2 + beginy * 2)) / 2 - 1;
  155.  
  156.         wsize_x = window -> Width;
  157.         wsize_y = window -> Height;
  158.     }
  159. }
  160.  
  161. int DrawNumber(int x_pos, int y_pos, unsigned short number)
  162. {
  163.  
  164.     PosX = x_pos;
  165.     PosY = y_pos;
  166.  
  167.     DeleteNumber(PosX, PosY);
  168.     SetAPen(rastport, 2);
  169.     switch(number) {
  170.         case 0:    DrawPart(6, 1, 2, 3, 5, 6, 7);
  171.             break;
  172.         case 1: DrawPart(2, 3, 6);
  173.             break;
  174.         case 2:    DrawPart(5, 1, 3, 4, 5, 7);
  175.             break;
  176.         case 3:    DrawPart(5, 1, 3, 4, 6, 7);
  177.             break;
  178.         case 4:    DrawPart(4, 2, 3, 4, 6);
  179.             break;
  180.         case 5:    DrawPart(5, 1, 2, 4, 6, 7);
  181.             break;
  182.         case 6:    DrawPart(6, 1, 2, 4, 5, 6, 7);
  183.             break;
  184.         case 7:    DrawPart(3, 1, 3, 6);
  185.             break;
  186.         case 8:    DrawPart(7, 1, 2, 3, 4, 5, 6, 7);
  187.             break;
  188.         case 9:    DrawPart(6, 1, 2, 3, 4, 6, 7);
  189.         }
  190. }
  191.  
  192. int DrawPart(int max, ...)
  193. {
  194.     va_list arg;
  195.     int number, count;
  196.  
  197.     va_start(arg, max);
  198.     for(count = 0; count < max; ++count) {
  199.         number = va_arg(arg, int);
  200.         switch(number) {
  201.             case 1: DrawHorz(PosX, PosY);
  202.                 break;
  203.             case 2: DrawVert(PosX, PosY);
  204.                 break;
  205.             case 3: DrawVert(PosX + spacex + horsize, PosY);
  206.                 break;
  207.             case 4: DrawHorz(PosX, PosY + spacey + versize);
  208.                 break;
  209.             case 5: DrawVert(PosX, PosY + spacey + versize);
  210.                 break;
  211.             case 6: DrawVert(PosX + spacex + horsize, PosY + spacey + versize);
  212.                 break;
  213.             case 7: DrawHorz(PosX, PosY + spacey * 2 + versize * 2);
  214.             }
  215.         }
  216.     va_end(arg);
  217. }
  218.  
  219. int DrawHorz(int BeginX, int BeginY)
  220. {
  221.     Move(rastport, BeginX, BeginY);
  222.     Draw(rastport, BeginX + spacex, BeginY - spacey);
  223.     Draw(rastport, BeginX + horsize, BeginY - spacey);
  224.     Draw(rastport, BeginX + horsize + spacex, BeginY);
  225.     Draw(rastport, BeginX + horsize, BeginY + spacey);
  226.     Draw(rastport, BeginX + spacex, BeginY + spacey);
  227.     Draw(rastport, BeginX, BeginY);
  228. }
  229.  
  230. int DrawVert(int BeginX, int BeginY)
  231. {
  232.     Move(rastport, BeginX, BeginY);
  233.     Draw(rastport, BeginX + spacex, BeginY + spacey);
  234.     Draw(rastport, BeginX + spacex, BeginY + versize);
  235.     Draw(rastport, BeginX, BeginY + spacey + versize);
  236.     Draw(rastport, BeginX - spacex, BeginY + versize);
  237.     Draw(rastport, BeginX - spacex, BeginY + spacey);
  238.     Draw(rastport, BeginX, BeginY);
  239.  
  240. }
  241.  
  242. int DeleteNumber(int x_pos, int y_pos)
  243. {
  244.     SetAPen(rastport, 0);
  245.     RectFill(rastport, x_pos - spacex, y_pos - spacey,
  246.         x_pos + horsize + spacex * 2, y_pos + versize * 2 + spacey * 3);
  247. }
  248.  
  249. int DeleteAll(void)
  250. {
  251.     SetAPen(rastport, 0);
  252.     RectFill(rastport, 4, 12, window -> Width - 19, window -> Height - 3);
  253. }
  254.  
  255. int DrawPoints(int x, int y)
  256. {
  257.     SetAPen(rastport, 2);
  258.     DrawOnePoint(x, y);
  259.     DrawOnePoint(x, y + versize);
  260. }
  261.  
  262. int DrawOnePoint(int px, int py)
  263. {
  264.     Move(rastport, px + spacex, py - spacey);
  265.     Draw(rastport, px + spacex, py + spacey);
  266.     Draw(rastport, px - spacex, py + spacey);
  267.     Draw(rastport, px - spacex, py - spacey);
  268.     Draw(rastport, px + spacex, py - spacey);
  269. }
  270.  
  271.